package views;
import java.awt.Font;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class MainFrame extends JFrame {
private static final long serialVersionUID = 1L;
private JFrame frame;
private JTextArea logText = new JTextArea();
private JTextField currentCycleField = new JTextField();
private JTextField minArrivalTimeField;
private JTextField maxArrivalTimeField;
private JTextField minServingTimeField;
private JTextField maxServingTimeField;
private JTextField queueCountField;
private JTextField simulationTimeField;
private JScrollPane scrollPane = new JScrollPane();
private JButton startButton = new JButton("Start Simulation");
private JButton btnClearLog = new JButton("Clear Log");
private JPanel graphPanel = new JPanel();
public MainFrame() {
frame = new JFrame();
frame.setSize(927, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.getContentPane().setLayout(null);
frame.setTitle("Queue Simulation");
initializeFieldsAndLabels();
initializeLog();
frame.setVisible(true);
}
public void setLog(String text) {
logText.setText(text);
scrollPane.getVerticalScrollBar().setValue(scrollPane.getVerticalScrollBar().getMaximum());
}
public void setCycleCountField(String text) {
currentCycleField.setText(text);
}
public void initializeFieldsAndLabels() {
JLabel minArraivalLabel = new JLabel("Min Arrival Time");
minArraivalLabel.setBounds(173, 12, 115, 20);
frame.getContentPane().add(minArraivalLabel);
JLabel maxArrivalLabel = new JLabel("Max Arrival Time");
maxArrivalLabel.setBounds(173, 64, 115, 20);
frame.getContentPane().add(maxArrivalLabel);
JLabel minServingLabel = new JLabel("Min Serving Time");
minServingLabel.setBounds(12, 12, 115, 20);
frame.getContentPane().add(minServingLabel);
JLabel maxServingLabel = new JLabel("Max Serving Time");
maxServingLabel.setBounds(12, 64, 127, 20);
frame.getContentPane().add(maxServingLabel);
JLabel queueCountLabel = new JLabel("Queue Count");
queueCountLabel.setBounds(320, 12, 127, 20);
frame.getContentPane().add(queueCountLabel);
JLabel simulationTimeLabel = new JLabel("Simulation Time");
simulationTimeLabel.setBounds(320, 64, 127, 20);
frame.getContentPane().add(simulationTimeLabel);
minArrivalTimeField = new JTextField();
minArrivalTimeField.setText("1");
minArrivalTimeField.setBounds(173, 32, 135, 20);
frame.getContentPane().add(minArrivalTimeField);
minArrivalTimeField.setColumns(10);
maxArrivalTimeField = new JTextField();
maxArrivalTimeField.setText("24");
maxArrivalTimeField.setColumns(10);
maxArrivalTimeField.setBounds(174, 84, 135, 20);
frame.getContentPane().add(maxArrivalTimeField);
minServingTimeField = new JTextField();
minServingTimeField.setText("1");
minServingTimeField.setColumns(10);
minServingTimeField.setBounds(12, 32, 135, 20);
frame.getContentPane().add(minServingTimeField);
maxServingTimeField = new JTextField();
maxServingTimeField.setText("25");
maxServingTimeField.setColumns(10);
maxServingTimeField.setBounds(12, 84, 135, 20);
frame.getContentPane().add(maxServingTimeField);
queueCountField = new JTextField();
queueCountField.setText("5");
queueCountField.setColumns(10);
queueCountField.setBounds(320, 32, 135, 20);
frame.getContentPane().add(queueCountField);
simulationTimeField = new JTextField();
simulationTimeField.setText("30");
simulationTimeField.setColumns(10);
simulationTimeField.setBounds(321, 84, 135, 20);
frame.getContentPane().add(simulationTimeField);
startButton.setBounds(465, 27, 135, 29);
frame.getContentPane().add(startButton);
}
public void setGraphPanel(SimulationPanel gPanel) {
frame.getContentPane().remove(graphPanel);
graphPanel = gPanel;
graphPanel.setBounds(12, 116, 587, 443);
frame.getContentPane().add(graphPanel);
}
public void initializeLog() {
JLabel currentCycleLabel = new JLabel("CurrentCycle");
currentCycleLabel.setFont(new Font("Tahoma", Font.PLAIN, 15));
currentCycleLabel.setBounds(475, 64, 95, 20);
frame.getContentPane().add(currentCycleLabel);
currentCycleField.setEditable(false);
currentCycleField.setBounds(468, 84, 95, 20);
currentCycleField.setFont(new Font("Tahoma", Font.PLAIN, 20));
currentCycleField.setHorizontalAlignment(SwingConstants.CENTER);
currentCycleField.setColumns(10);
frame.getContentPane().add(currentCycleField);
scrollPane.setBounds(612, 12, 297, 512);
logText.setEditable(false);
scrollPane.setViewportView(logText);
frame.getContentPane().add(scrollPane);
btnClearLog.setBounds(820, 536, 89, 23);
frame.getContentPane().add(btnClearLog);
}
public final void setStartButtonActionListener(final ActionListener a) {
startButton.addActionListener(a);
}
public final void setClearButtonActionListener(final ActionListener a) {
btnClearLog.addActionListener(a);
}
public String getCurrentCycleField() {
return currentCycleField.getText();
}
public String getMinArrivalTimeField() {
return minArrivalTimeField.getText();
}
public String getMaxArrivalTimeField() {
return maxArrivalTimeField.getText();
}
public String getMinServingTimeField() {
return minServingTimeField.getText();
}
public String getMaxServingTimeField() {
return maxServingTimeField.getText();
}
public String getQueueCountField() {
return queueCountField.getText();
}
public String getSimulationTimeField() {
return simulationTimeField.getText();
}
}